package com.matrix.framework.core.listcrud.data;

import java.util.concurrent.atomic.AtomicLong;

/**
 * 基础数据抽象类
 * 所有需要进行List增删改查操作的数据类都应该继承此类
 *
 * Copyright © 海平面工作室 版权所有
 *
 * @Author: Leo
 * @Create: 2025/9/20 11:00
 * @Since 1.2
 */
public abstract class BaseData {
    
    private static final AtomicLong ID_GENERATOR = new AtomicLong(1);
    
    /**
     * 唯一标识，自动增长
     */
    private Long id;
    
    /**
     * 构造函数，自动分配ID
     */
    public BaseData() {
        this.id = ID_GENERATOR.getAndIncrement();
    }
    
    /**
     * 构造函数，可指定ID（用于反序列化等场景）
     * @param id 指定的ID
     */
    public BaseData(Long id) {
        this.id = id;
        // 更新ID生成器，确保后续生成的ID不会重复
        if (id != null && id >= ID_GENERATOR.get()) {
            ID_GENERATOR.set(id + 1);
        }
    }
    
    public Long getId() {
        return id;
    }
    
    public void setId(Long id) {
        this.id = id;
    }
    
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        BaseData baseData = (BaseData) obj;
        return id != null && id.equals(baseData.id);
    }
    
    @Override
    public int hashCode() {
        return id != null ? id.hashCode() : 0;
    }
    
    @Override
    public String toString() {
        return this.getClass().getSimpleName() + "{id=" + id + "}";
    }
} 